package datatypes.r2.basic.impl;

import datatypes.r2.basic.BIN;
import datatypes.r2.basic.CS;
import datatypes.r2.basic.ED;
import datatypes.r2.basic.OID;
import datatypes.r2.basic.ST;
import datatypes.r2.flavors.ST_NT;
import datatypes.r2.flavors.TEL_URL;
import datatypes.r2.foundation.DSET;
import datatypes.r2.foundation.impl.Sequence;
import datatypes.r2.quantities.INT;
import datatypes.r2.quantities.impl.IntegerNumber;

/**
 * A globally unique string representing an ISO Object Identifier (OID) in a
 * form that consists only of numbers and dots (e.g., "2.16.840.1.113883.3.1").
 * According to ISO, OIDs are paths in a tree structure, with the left-most
 * number representing the root and the right-most number representing a leaf.
 * 
 * Each branch under the root corresponds to an assigning authority. Each of
 * these assigning authorities may, in turn, designate its own set of assigning
 * authorities that work under its auspices, and so on down the line.
 * Eventually, one of these authorities assigns a unique (to it as an assigning
 * authority) number that corresponds to a leaf node on the tree. The leaf may
 * represent an assigning authority (in which case the root OID identifies the
 * authority), a class of particlar objects, or an instance of an object. An
 * assigning authority owns a namespace, consisting of its sub-tree.
 * 
 * @author Obama
 * 
 */
public class ObjectIdentifier extends Sequence<INT> implements OID {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private IntegerNumber leaf;
	private ObjectIdentifier butLeaf;

	/**
	 * According to ISO/IEC 8824 an object identifier is a sequence of object
	 * identifier component values, which are integer numbers. These component
	 * values are ordered such that the root of the object identifier tree is
	 * the head of the list followed by all the arcs down to the leaf
	 * representing the information object identified by the OID. The fact that
	 * OID specializes LIST<INT> represents this path of object identifier
	 * component values from the root to the leaf.
	 * 
	 * The leaf and "butLeaf" properties take the opposite view. The leaf is the
	 * last object identifier component value in the list, and the "butLeaf"
	 * property is all of the OID but the leaf. In a sense, the leaf is the
	 * identifier value and all of the OID but the leaf refers to the namespace
	 * in which the leaf is unique and meaningful.
	 * 
	 * However, what part of the OID is considered value and what is namespace
	 * may be viewed differently. In general, any OID component sequence to the
	 * left can be considered the namespace in which the rest of the sequence to
	 * the right is defined as a meaningful and unique identifier value. The
	 * value-property with a namespace OID as its argument represents this point
	 * of view.37
	 */
	@Override
	public INT leaf() {

		return leaf;
	}

	@Override
	public OID butLeaf() {

		return butLeaf;
	}

	@Override
	public ST_NT headCharacter() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ST_NT tailString() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public DSET<? extends ST_NT> translation() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public BIN data() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CS mediaType() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CS charset() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CS language() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CS compression() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public TEL_URL reference() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public BIN integrityCheck() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public CS integrityCheckAlgorithm() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ST description() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ED thumbnail() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ED subPart(INT start, INT end) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public OID value(OID namespace) {
		// TODO Auto-generated method stub
		return null;
	}

}
